python环境下利用opencv进行数字识别(模板匹配) |
您所在的位置:网站首页 › opencv 字符识别 › python环境下利用opencv进行数字识别(模板匹配) |
0.前言 昨天在CSDN上看到了一个用C++实现的字符数字识别,就照着他的方法写了一个关于python的数字识别。这次主要分为两大部分,分别为字符分割和模板匹配,下面直接看主内容吧。 1.字符分割 字符分割我主要是用下面的这张照片先进行将上面的数字分割,设计道德方法用水平像素分布和垂直像素分布 1.1图片的获取 我们使用的图片就是上图 1.2图片的水平分割 分割后为以上三张照片 分割的步骤为二值化=》计算水平方向的黑色点数=》根据黑色点数分布进行图片分割 下面直接看代码 #对图片进行水平分割,返回的是分割好的照片数组 def horizontalCut(img): (x,y)=img.shape #返回的分别是矩阵的行数和列数,x是行数,y是列数 pointCount=np.zeros(y,dtype=np.uint8)#每行黑色的个数 x_axes=np.arange(0,y) for i in range(0,x): for j in range(0,y): if(img[i,j]==0): pointCount[i]=pointCount[i]+1 plt.plot(x_axes,pointCount) start=[]#开始索引数组 end=[]#结束索引数组 #对照片进行分割 for index in range(1,y): #上个为0当前不为0,即为开始 if((pointCount[index]!=0)&(pointCount[index-1]==0)): start.append(index) #上个不为0当前为0,即为结束 elif((pointCount[index]==0)&(pointCount[index-1]!=0)): end.append(index) img1=img[start[0]:end[0],:] img2=img[start[1]:end[1],:] img3=img[start[2]:end[2],:] imgArr=[img1,img2,img3] for m in range(3): cv2.imshow(str(m),imgArr[m]) cv2.waitKey() plt.show() return imgArr1.3照片的垂直分割 上图为切割后的照片 主要步骤为:求出图片垂直方向黑色点数=》进行图片切割 # 对图片进行垂直分割,传入的是二值图 def verticalCut(img,img_num): (x,y)=img.shape #返回的分别是矩阵的行数和列数,x是行数,y是列数 pointCount=np.zeros(y,dtype=np.float32)#每列黑色的个数 x_axes=np.arange(0,y) #i是列数,j是行数 tempimg=img.copy() for i in range(0,y): for j in range(0,x): # if j |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |